#pragma once

#include "fxcc/core/graph/common/pch.h"

namespace fxcc
{
	namespace graph
	{
		namespace common
		{
			enum class DataType
			{
				_dataType_none_ = 0,
				_dataType_float_,
				_dataType_Unsigned_byte_,
				_dataType_Unsigned_short_,
				_dataType_Unsigned_int_,
				_dataType_byte_,
				_dataType_short_,
				_dataType_int_,
				_count_,
			};

			enum class Texture2DDescType
			{
				_texture_2d_desc_none_ = 0,
				// Form origin data
				_texture_2d_desc_origin_data_,
				// From image
				_texture_2d_desc_imaga_desc_,
				// From origin file
				_texture_2d_desc_origin_file_,

				_texture_2d_desc_end_

			};



			enum class TextureMatType
			{
				_Texture_Mat_NONE = 0,
				_Texture_Mat_DIFFUSE,
				_Texture_Mat_SPECULAR,
				_Texture_Mat_AMBIENT,
				_Texture_Mat_EMISSIVE,
				_Texture_Mat_HEIGHT,
				_Texture_Mat_NORMALS,
				_Texture_Mat_SHININESS,
				_Texture_Mat_OPACITY,
				_Texture_Mat_DISPLACEMENT,
				_Texture_Mat_LIGHTMAP,
				_Texture_Mat_REFLECTION,
				_Texture_Mat_BASE_COLOR,
				_Texture_Mat_NORMAL_CAMERA,
				_Texture_Mat_EMISSION_COLOR,
				_Texture_Mat_METALNESS,
				_Texture_Mat_DIFFUSE_ROUGHNESS,
				_Texture_Mat_AMBIENT_OCCLUSION,
				_Texture_Mat_UNKNOWN,
				_Texture_Mat_Count,
			};

			enum class SamplerType
			{
				_sampler_none_ = 0,
				_sampler_2d_default_,
				_sampler_cube_default_,
				_sampler_cube_mipmap_linear_,
				_sampler_2d_array_default,
				_sampler_2d_nearest,
				_sampler_2d_nearest_no_wrap,
				_sampler_2d_nearest_repeat,
				_sampler_3d_default,
				_count_
			};

			enum class TextureType
			{
				_texture_none_ = 0,
				_texture_2d_,
				_texture_cube_,
				_texture_2d_array_,
				_texture_end_

			};


			enum class VertexType
			{
				_vertex_none_ = 0,
				_vertex_fixed_,
				_vertex_skinned_,
				_vertex_font_,
				_vertex_end_
			};
			enum class IndexType
			{
				_index_none_ = 0,
				_index_unsigned_byte_,
				_index_unsigned_short_,
				_index_unsigned_int_,
				_index_end_
			};


			enum class ModeType
			{
				_mode_none_ = 0,
				_mode_Triangles_,
				_mode_Triangle_stripe_,
				_mode_Lines_,
				_mode_Line_Stripe,
				_mode_points_,
				_mode_end_
			};


			enum class DepthStencilType
			{
				_DEFAULT_ = 0,

				// depth less and no stencil
				_DEPTH_LESS_STENCIL_NONE,

				_DEPTH_LEQUAL_STENCIL_NONE,

				// depth less and stencil always
				_DEPTH_LESS_STENCIL_ALAWAYS_WRITE,

				_DEPTH_LESS_STENCIL_ONLY_STENCIL_PASS,

				_DEPTH_NONE_STENCIL_NONE_,

				_END_
			};

			enum class BlendType
			{
				_NONE_ = 0,

				// blend render font
				_FONT_,

				_END_
			};

			enum class RasterizerType
			{
				_NONE_ = 0,
				_CULL_BACK_CCW_,
				_END_
			};



		};
	};
};